import jwt from 'jsonwebtoken'
import { PUBLIC_KEY } from '../app/config.js'
import api from '../utils/apiBase.js'

/**
 * token鉴权 中间件
 * @param {import('koa').ParameterizedContext} ctx
 * @param {import('koa').Next} next
 * @returns {Promise<*>}
 */
export const tokenAuth = async (ctx, next) => {
    const token = ctx.headers.token
    if (!token) {
        ctx.body = api.error('未登录', 401)
    } else {
        try {
            /*
        verify(token, 公钥, 选项{algorithms: 算法})
        返回 数据体 + iat与exp
      */
            ctx.user = jwt.verify(token, PUBLIC_KEY, { algorithms: ['RS256'] })
            await next()
        } catch (error) {
            ctx.body = api.error('token失效', 402)
        }
    }
}
